
#ifndef TIMER_H
#define TIMER_H

#include "int.h"
#include "dtstruct.h"
#include "multask.h"
	void init_pit (void ) ;
	void handler_int20 (int * esp); 

#define MAX_TIMER		500

#define TIMER_FLAGS_FREE        0   /*未使用*/
#define TIMER_FLAGS_ALLOC		1	/*已分配状态*/
#define TIMER_FLAGS_USING		2   /**正在使用*/
	struct TIMER ; 
	typedef struct { 
		unsigned int flags;     //该timer的使用状态
		unsigned int timeout ; //超时时间
		struct TIMER * next ;  //链表结构，timeout从小到大排序
		INTDATA data ;  //timer 的标记 ，timer1 ，timer2 ，timer3等
		CQUEUE * cq ;  //timer timeout时的输出队列
	} TIMER ;

	typedef struct { 
		unsigned int count ,next; /** timer计数 /下一个timeout的时间 */
		TIMER * t0; //链表首结点 ，根据timeout从小到大排序
		TIMER timers0[MAX_TIMER] ; //timer的实际存储结构
		
	} TIMER_MANAGEMENT ;


	
	
	//void timer_man_setbuf (CQUEUE *cq) ;
	TIMER * timer_alloc (void) ;
	void timer_free( TIMER *timer) ;
	void timer_init( TIMER *timer,CQUEUE * cq, char data );
	void timer_settime (TIMER * timer , unsigned int timeout ) ;
#endif 

	